package thread.safety01;

/**
 * 临界资源：一次仅允许一个进程使用的资源。
 * 临界区：每个进程中，访问临界资源的那段代码。
 * 临界资源（共享资源） 只允许一个线程进行访问 多个线程同时进入临界区会有线程安全的问题
 * 存在重复的票 和 不存在的票
 * 重复的票： 当第一个线程还没执行ticket-- 另一个线程抢夺了cpu执行权
 * 不存在的票： 当剩下最后一张票 卖票之后 还没来得及修改ticket的值 ticket--  另一个线程进入if语句 此时ticket = 1 if(ticket >0)
 */
public class RunnableImpl implements Runnable{
    private int ticket = 100;
    @Override
    public void run() {
        while(true){
            if(ticket > 0){//票存在
                try {
                    Thread.sleep(10);//提高线程安全出现问题的概率
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+"正在卖第"+ticket+"张票");
                ticket--;
            }
        }
    }
}
